package com.bestcem.xm.ticket.entity.mongo;

import com.bestcem.xm.ticket.constant.ColumnConstant;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import java.io.Serializable;

/**
 * 记录公司的各类提醒方式
 * 问卷项目->开启提醒->工单规则->具体工单规则->跟进处理->通知方式
 * 一个公司对应一条通知方式记录
 * 预警模块迁移表
 * <p>
 * 管理员用户,在【企业管理】中设置的可用的通知方式.
 * 在预警规则中的通知设置,依赖于在【企业管理】中设置的通知方式. 在预警模块中只查询,不进行更新操作.
 * 在预警模块中选择的通知方式,会存在每条预警规则中.
 * 当预警规则触发时,根据此规则配置的通知方式,去发送预警通知.
 *
 * @author XiaoYunSong <ys.xiao@idiaoyan.com>
 * @version v1.0
 * @date 2021/8/10 16:13
 */
@ToString(callSuper = true)
@Getter
@Setter
public class NotifySetting extends BaseEntity {

    private static final long serialVersionUID = -7253778583948098509L;

    /**
     * 公司ID
     */
    @JsonProperty(value = ColumnConstant.NotifySetting.ORG_ID)
    private String orgId;

    /**
     * 通知方式
     */
    @JsonProperty(value = ColumnConstant.NotifySetting.WAYS)
    private Way ways;

    /**
     * 是否sample
     */
    @JsonProperty(value = ColumnConstant.NotifySetting.SAMPLE)
    private Boolean sample;

    /**
     * 通知方式
     *
     * @author XiaoYunSong <ys.xiao@idiaoyan.com>
     * @version v1.0
     * @date 2021/8/10 17:50
     */
    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class Way implements Serializable {
        private static final long serialVersionUID = 2808726620840986656L;

        /**
         * 是否开启邮箱通知
         */
        @JsonProperty(value = ColumnConstant.NotifySetting.Way.EMAIL)
        private Boolean email;

        /**
         * 是否开启短信通知
         */
        @JsonProperty(value = ColumnConstant.NotifySetting.Way.SMS)
        private Boolean sms;

        /**
         * 是否开启飞书通知
         */
        @JsonProperty(value = ColumnConstant.NotifySetting.Way.FEISHU)
        private Boolean feiShu;

        /**
         * 是否开启企业微信通知
         */
        @JsonProperty(value = ColumnConstant.NotifySetting.Way.WECHATWORK)
        private Boolean weChatWork;

        /**
         * 是否开启钉钉通知
         */
        @JsonProperty(value = ColumnConstant.NotifySetting.Way.DINGTALK)
        private Boolean dingtalk;
    }
}
